Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>MurmurHash</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/MurmurHash"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-MurmurHash rootpage-MurmurHash skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">MurmurHash</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p class="mw-empty-elt">
</p><p><b>MurmurHash</b> is a <a href="Non-cryptographic_hash_function" title="Non-cryptographic hash function">non-cryptographic hash function</a> suitable for general hash-based lookup.<sup id="cite_ref-Hadoop_1-0" class="reference"><a href="#cite_note-Hadoop-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> It was created by Austin Appleby in 2008<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> and, as of 8 January 2016,<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> is hosted on <a href="GitHub" title="GitHub">GitHub</a> along with its test suite named SMHasher. It also exists in a number of variants,<sup id="cite_ref-Murmur160_6-0" class="reference"><a href="#cite_note-Murmur160-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> all of which have been released into the public domain. The name comes from two basic operations, multiply (MU) and rotate (R), used in its inner loop.
</p><p>Unlike <a href="Cryptographic_hash_function" title="Cryptographic hash function">cryptographic hash functions</a>, it is not specifically designed to be difficult to reverse by an adversary, making it unsuitable for cryptographic purposes.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Variants">Variants</h2></div>
<div class="mw-heading mw-heading3"><h3 id="MurmurHash1">MurmurHash1</h3></div>
<p>The original MurmurHash was created as an attempt to make a faster function than <a href="Jenkins_hash_function#lookup3" title="Jenkins hash function">Lookup3</a>.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Although successful, it had not been tested thoroughly and was not capable of providing 64-bit hashes as in Lookup3. Its design would be later built upon in MurmurHash2, combining a multiplicative hash (similar to the <a href="Fowler%E2%80%93Noll%E2%80%93Vo_hash_function" title="Fowler–Noll–Vo hash function">Fowler–Noll–Vo hash function</a>) with an <a href="Xorshift" title="Xorshift">Xorshift</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="MurmurHash2">MurmurHash2</h3></div>
<p>MurmurHash2<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> yields a 32- or 64-bit value. It comes in multiple variants, including some that allow incremental hashing and aligned or neutral versions.
</p>
<ul><li>MurmurHash2 (32-bit, x86)—The original version; contains a flaw that weakens collision in some cases.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup></li>
<li>MurmurHash2A (32-bit, x86)—A fixed variant using <a href="Merkle%E2%80%93Damg%C3%A5rd_construction" title="Merkle–Damgård construction">Merkle–Damgård construction</a>. Slightly slower.</li>
<li>CMurmurHash2A (32-bit, x86)—MurmurHash2A, but works incrementally.</li>
<li>MurmurHashNeutral2 (32-bit, x86)—Slower, but endian- and alignment-neutral.</li>
<li>MurmurHashAligned2 (32-bit, x86)—Slower, but does aligned reads (safer on some platforms).</li>
<li>MurmurHash64A (64-bit, x64)—The original 64-bit version. Optimized for 64-bit arithmetic.</li>
<li>MurmurHash64B (64-bit, x86)—A 64-bit version optimized for 32-bit platforms. It is not a true 64-bit hash due to insufficient mixing of the stripes.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li></ul>
<p>The person who originally found the flaw in MurmurHash2 created an unofficial 160-bit version of MurmurHash2 called MurmurHash2_160.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="MurmurHash3">MurmurHash3</h3></div>
<p>The current version, completed April 3, 2011, is MurmurHash3,<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Horvath_13-0" class="reference"><a href="#cite_note-Horvath-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> which yields a 32-bit or 128-bit hash value. When using 128-bits, the x86 and x64 versions do not produce the same values, as the algorithms are optimized for their respective platforms. MurmurHash3 was released alongside SMHasher, a hash function test suite.
</p>
<div class="mw-heading mw-heading2"><h2 id="Implementations">Implementations</h2></div>
<p>The canonical implementation is in <a href="C%2B%2B" title="C++">C++</a>, but there are efficient ports for a variety of popular languages, including <a href="Python_(programming_language)" title="Python (programming language)">Python</a>,<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> <a href="C_(programming_language)" title="C (programming language)">C</a>,<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> <a href="Go_(programming_language)" title="Go (programming language)">Go</a>,<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>,<sup id="cite_ref-Horvath_13-1" class="reference"><a href="#cite_note-Horvath-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> <a href="D_(programming_language)" title="D (programming language)">D</a>,<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> <a rel="nofollow" class="external text" href="https://github.com/tkaemming/lua-murmurhash3">Lua</a>, <a href="Perl" title="Perl">Perl</a>,<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>,<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> <a href="Rust_(programming_language)" title="Rust (programming language)">Rust</a>,<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> <a href="PHP" title="PHP">PHP</a>,<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> <a href="Common_Lisp" title="Common Lisp">Common Lisp</a>,<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> <a href="Haskell_(programming_language)" class="mw-redirect" title="Haskell (programming language)">Haskell</a>,<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup> <a href="Elm_(programming_language)" title="Elm (programming language)">Elm</a>,<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> <a href="Clojure" title="Clojure">Clojure</a>,<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> <a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a>,<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup> <a href="Java_(programming_language)" title="Java (programming language)">Java</a>,<sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup> <a href="Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>,<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> <a href="Swift_(programming_language)" title="Swift (programming language)">Swift</a>,<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup> <a href="Object_Pascal" title="Object Pascal">Object Pascal</a>,<sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup> <a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a>,<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> <a href="JavaScript" title="JavaScript">JavaScript</a>,<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> and <a href="OCaml" title="OCaml">OCaml</a>.<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup>
</p><p>It has been adopted into a number of open-source projects, most notably <a href="Libstdc%2B%2B" class="mw-redirect" title="Libstdc++">libstdc++</a> (ver 4.6), <a href="Nginx" title="Nginx">nginx</a> (ver 1.0.1),<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup> <a href="Rubinius" title="Rubinius">Rubinius</a>,<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup> libmemcached (the <a href="C_(programming_language)" title="C (programming language)">C</a> driver for <a href="Memcached" title="Memcached">Memcached</a>),<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup> <a href="Npm_(software)" class="mw-redirect" title="Npm (software)">npm</a> (nodejs package manager),<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup> maatkit,<sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> <a href="Hadoop" class="mw-redirect" title="Hadoop">Hadoop</a>,<sup id="cite_ref-Hadoop_1-1" class="reference"><a href="#cite_note-Hadoop-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Kyoto Cabinet,<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup> <a href="Apache_Cassandra" title="Apache Cassandra">Cassandra</a>,<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup> <a href="Apache_Solr" title="Apache Solr">Solr</a>,<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup> <a href="Vowpal_Wabbit" title="Vowpal Wabbit">vowpal wabbit</a>,<sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup> <a href="Elasticsearch" title="Elasticsearch">Elasticsearch</a>,<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup> <a href="Google_Guava" title="Google Guava">Guava</a>,<sup id="cite_ref-49" class="reference"><a href="#cite_note-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup> <a href="Apache_Kafka" title="Apache Kafka">Kafka</a>,<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup> and <a rel="nofollow" class="external text" href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/vdo-integration">RedHat Virtual Data Optimizer (VDO)</a>.<sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Vulnerabilities">Vulnerabilities</h2></div>
<p>Hash functions can be vulnerable to <a href="Collision_attack" title="Collision attack">collision attacks</a>, where a user can choose input data in such a way so as to intentionally cause hash collisions. Jean-Philippe Aumasson and <a href="Daniel_J._Bernstein" title="Daniel J. Bernstein">Daniel J. Bernstein</a> were able to show that even implementations of MurmurHash using a randomized seed are vulnerable to so-called <a href="HashDoS" class="mw-redirect" title="HashDoS">HashDoS</a> attacks.<sup id="cite_ref-52" class="reference"><a href="#cite_note-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup> With the use of <a href="Differential_cryptanalysis" title="Differential cryptanalysis">differential cryptanalysis</a>, they were able to generate inputs that would lead to a hash collision. The authors of the attack recommend using their own <a href="SipHash" title="SipHash">SipHash</a> instead.
</p>
<div class="mw-heading mw-heading2"><h2 id="Algorithm">Algorithm</h2></div>
<pre><b>algorithm</b> Murmur3_32 <b>is</b>
<i>// Note: In this version, all arithmetic is performed with unsigned 32-bit integers.</i>
<i>// In the case of overflow, the result is reduced modulo <span class="texhtml">2<sup>32</sup></span>.</i>
<b>input:</b> <i>key</i>, <i>len</i>, <i>seed</i>

c1 ← 0xcc9e2d51
c2 ← 0x1b873593
r1 ← 15
r2 ← 13
m ← 5
n ← 0xe6546b64

hash ← <i>seed</i>

<b>for each</b> fourByteChunk of <i>key</i> <b>do</b>
k ← fourByteChunk

k ← k × c1
k ← k ROL r1
k ← k × c2

hash ← hash XOR k
hash ← hash ROL r2
hash ← (hash × m) + n

<b>with any</b> remainingBytesInKey <b>do</b>
remainingBytes ← SwapToLittleEndian(remainingBytesInKey)
<i>// Note: Endian swapping is only necessary on big-endian machines.</i>
<i>// The purpose is to place the meaningful digits towards the low end of the value,</i>
<i>// so that these digits have the greatest potential to affect the low range digits</i>
<i>// in the subsequent multiplication. Consider that locating the meaningful digits</i>
<i>// in the high range would produce a greater effect upon the high digits of the</i>
<i>// multiplication, and notably, that such high digits are likely to be discarded</i>
<i>// by the modulo arithmetic under overflow. We don't want that.</i>

remainingBytes ← remainingBytes × c1
remainingBytes ← remainingBytes ROL r1
remainingBytes ← remainingBytes × c2

hash ← hash XOR remainingBytes

hash ← hash XOR <i>len</i>

hash ← hash XOR (hash &gt;&gt; 16)
hash ← hash × 0x85ebca6b
hash ← hash XOR (hash &gt;&gt; 13)
hash ← hash × 0xc2b2ae35
hash ← hash XOR (hash &gt;&gt; 16)
</pre>
<p>A sample C implementation follows (for little-endian CPUs):
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="k">static</span><span class="w"> </span><span class="kr">inline</span><span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="nf">murmur_32_scramble</span><span class="p">(</span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">k</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">*=</span><span class="w"> </span><span class="mh">0xcc9e2d51</span><span class="p">;</span>
<span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="mi">15</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="w"> </span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="mi">17</span><span class="p">);</span>
<span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">*=</span><span class="w"> </span><span class="mh">0x1b873593</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">k</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">uint32_t</span><span class="w"> </span><span class="nf">murmur3_32</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">uint8_t</span><span class="o">*</span><span class="w"> </span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">len</span><span class="p">,</span><span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">seed</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">seed</span><span class="p">;</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">k</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/* Read in groups of 4. */</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">size_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">len</span><span class="w"> </span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">--</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Here is a source of differing results across endiannesses.</span>
<span class="w"> </span><span class="c1">// A swap here has no effects on hash properties though.</span>
<span class="w"> </span><span class="n">memcpy</span><span class="p">(</span><span class="o">&amp;</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">uint32_t</span><span class="p">));</span>
<span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">uint32_t</span><span class="p">);</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">murmur_32_scramble</span><span class="p">(</span><span class="n">k</span><span class="p">);</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">h</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="mi">13</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="p">(</span><span class="n">h</span><span class="w"> </span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="mi">19</span><span class="p">);</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mh">0xe6546b64</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/* Read the rest. */</span>
<span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">size_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">len</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">--</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">&lt;&lt;=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span>
<span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">|=</span><span class="w"> </span><span class="n">key</span><span class="p">[</span><span class="n">i</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">];</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// A swap is *not* necessary here because the preceding loop already</span>
<span class="w"> </span><span class="c1">// places the low bytes in the low places according to whatever endianness</span>
<span class="w"> </span><span class="c1">// we use. Swaps only apply when the memory is copied in a chunk.</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">murmur_32_scramble</span><span class="p">(</span><span class="n">k</span><span class="p">);</span>
<span class="w"> </span><span class="cm">/* Finalize. */</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">len</span><span class="p">;</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="mi">16</span><span class="p">;</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">*=</span><span class="w"> </span><span class="mh">0x85ebca6b</span><span class="p">;</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="mi">13</span><span class="p">;</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">*=</span><span class="w"> </span><span class="mh">0xc2b2ae35</span><span class="p">;</span>
<span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">^=</span><span class="w"> </span><span class="n">h</span><span class="w"> </span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="mi">16</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">h</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<table class="wikitable">
<caption>Tests
</caption>
<tbody><tr>
<th>Test string
</th>
<th>Seed value
</th>
<th>Hash value (hexadecimal)
</th>
<th>Hash value (decimal)
</th></tr>
<tr>
<td>
</td>
<td><code>0x00000000</code>
</td>
<td><code>0x00000000</code>
</td>
<td><code>0</code>
</td></tr>
<tr>
<td>
</td>
<td><code>0x00000001</code>
</td>
<td><code>0x514E28B7</code>
</td>
<td><code>1,364,076,727</code>
</td></tr>
<tr>
<td>
</td>
<td><code>0xffffffff</code>
</td>
<td><code>0x81F16F39</code>
</td>
<td><code>2,180,083,513</code>
</td></tr>
<tr>
<td>test
</td>
<td><code>0x00000000</code>
</td>
<td><code>0xba6bd213</code>
</td>
<td><code>3,127,628,307</code>
</td></tr>
<tr>
<td>test
</td>
<td><code>0x9747b28c</code>
</td>
<td><code>0x704b81dc</code>
</td>
<td><code>1,883,996,636</code>
</td></tr>
<tr>
<td>Hello, world!
</td>
<td><code>0x00000000</code>
</td>
<td><code>0xc0363e43</code>
</td>
<td><code>3,224,780,355</code>
</td></tr>
<tr>
<td>Hello, world!
</td>
<td><code>0x9747b28c</code>
</td>
<td><code>0x24884CBA</code>
</td>
<td><code>612,912,314</code>
</td></tr>
<tr>
<td>The quick brown fox jumps over the lazy dog
</td>
<td><code>0x00000000</code>
</td>
<td><code>0x2e4ff723</code>
</td>
<td><code>776,992,547</code>
</td></tr>
<tr>
<td>The quick brown fox jumps over the lazy dog
</td>
<td><code>0x9747b28c</code>
</td>
<td><code>0x2FA826CD</code>
</td>
<td><code>799,549,133</code>
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Non-cryptographic_hash_functions" class="mw-redirect" title="Non-cryptographic hash functions">Non-cryptographic hash functions</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-Hadoop-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-Hadoop_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Hadoop_1-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120112023407/http://hbase.apache.org/docs/current/api/org/apache/hadoop/hbase/util/MurmurHash.html">"Hadoop in Java"</a>. Hbase.apache.org. 24 July 2011. Archived from <a rel="nofollow" class="external text" href="https://hbase.apache.org/docs/current/api/org/apache/hadoop/hbase/util/MurmurHash.html">the original</a> on 12 January 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text">
<a rel="nofollow" class="external text" href="http://materias.fi.uba.ar/7500/chouza-tesisingenieriainformatica.pdf">Chouza et al</a>.</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text">
<cite class="citation web cs1 cs1-prop-foreign-lang-source"><a rel="nofollow" class="external text" href="http://www.inesc-id.pt/ficheiros/publicacoes/5453.pdf">"Couceiro et al"</a> <span class="cs1-format">(PDF)</span> (in Portuguese). p.&nbsp;14<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFTanjent_(tanjent)_wrote,3_March_2008_13:31:00" class="citation web cs1">Tanjent (tanjent) wrote,3 March 2008 13:31:00. <a rel="nofollow" class="external text" href="http://tanjent.livejournal.com/756623.html">"MurmurHash first announcement"</a>. Tanjent.livejournal.com<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite><span class="cs1-maint citation-comment"><code class="cs1-code">{{cite web}}</code>: CS1 maint: numeric names: authors list (link)</span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFAustin_Appleby" class="citation web cs1">Austin Appleby. <a rel="nofollow" class="external text" href="https://github.com/aappleby/smhasher">"SMHasher"</a>. Github.com<span class="reference-accessdate">. Retrieved <span class="nowrap">23 September</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-Murmur160-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-Murmur160_6-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://simonhf.wordpress.com/2010/09/25/murmurhash160/">"MurmurHash2-160"</a>. Simonhf.wordpress.com. 25 September 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/aappleby/smhasher/wiki/MurmurHash1">"MurmurHash1"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">12 January</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/aappleby/smhasher/blob/master/src/MurmurHash2.cpp">"MurmurHash2 on Github"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/aappleby/smhasher/wiki/MurmurHash2Flaw">"MurmurHash2Flaw"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">15 January</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/aappleby/smhasher/wiki/MurmurHash3#bulk-speed-test-hashing-an-8-byte-aligned-256k-block">"MurmurHash3 (see note on MurmurHash2_x86_64)"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">15 January</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://simonhf.wordpress.com/2010/09/25/murmurhash160/">"MurmurHash2_160"</a>. 25 September 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">12 January</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp">"MurmurHash3 on Github"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-Horvath-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-Horvath_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Horvath_13-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFHorvath2012" class="citation web cs1">Horvath, Adam (10 August 2012). <a rel="nofollow" class="external text" href="http://blog.teamleadnet.com/2012/08/murmurhash3-ultra-fast-hash-algorithm.html">"MurMurHash3, an ultra fast hash algorithm for C# / .NET"</a>.</cite></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://code.google.com/p/pyfasthash/">"pyfasthash in Python"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/wolkykim/qlibc">"C implementation in qLibc by Seungyoung Kim"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/spaolacci/murmur3">"murmur3 in Go"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite id="CITEREFLandman" class="citation web cs1">Landman, Davy. <a rel="nofollow" class="external text" href="http://landman-code.blogspot.com/2009/02/c-superfasthash-and-murmurhash2.html">"Davy Landman in C#"</a>. Landman-code.blogspot.com<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/phobos/std_digest_murmurhash.html">"std.digest.murmurhash - D Programming Language"</a>. <i>dlang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">5 November</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://metacpan.org/module/Digest::MurmurHash">"Toru Maesaka in Perl"</a>. metacpan.org<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><cite id="CITEREFYuki_Kurihara2014" class="citation web cs1">Yuki Kurihara (16 October 2014). <a rel="nofollow" class="external text" href="https://github.com/ksss/digest-murmurhash">"Digest::MurmurHash"</a>. GitHub.com<span class="reference-accessdate">. Retrieved <span class="nowrap">18 March</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/stusmall/murmur3">"stusmall/murmur3"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">29 November</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/owengombas/murmurs">"owengombas/murmurs"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">13 June</span> 2025</span>.</cite></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/lastguest/murmurhash-php">"PHP userland implementation of MurmurHash3"</a>. github.com<span class="reference-accessdate">. Retrieved <span class="nowrap">18 December</span> 2017</span>.</cite></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://php.watch/versions/8.1/MurmurHash3">"PHP 8.1 with MurmurHash3 support"</a>.</cite></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://bitbucket.org/tarballs_are_good/murmurhash3">"tarballs_are_good / murmurhash3"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">7 February</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://hackage.haskell.org/package/murmur-hash">"Haskell"</a>. Hackage.haskell.org<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://package.elm-lang.org/packages/Skinney/murmur3/latest/">"Elm"</a>. package.elm-lang.org<span class="reference-accessdate">. Retrieved <span class="nowrap">12 June</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Murmur3.java">"Murmur3.java in Clojure source code on Github"</a>. clojure.org<span class="reference-accessdate">. Retrieved <span class="nowrap">11 March</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/scala/scala/blob/2.12.x/src/library/scala/util/hashing/MurmurHash3.scala">"Scala standard library implementation"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>. 26 September 2014.</cite></span>
</li>
<li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/hash/Hashing.html">Murmur3</a>, part of Guava</span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/greenrobot/greenrobot-common/blob/master/hash-functions.md">"Murmur3A and Murmur3F Java classes on Github"</a>. greenrobot<span class="reference-accessdate">. Retrieved <span class="nowrap">5 November</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/bipthelin/murmerl3">"bipthelin/murmerl3"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">21 October</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><cite id="CITEREFDaisuke_T2019" class="citation web cs1">Daisuke T (7 February 2019). <a rel="nofollow" class="external text" href="https://github.com/daisuke-t-jp/MurmurHash-Swift">"MurmurHash-Swift"</a>. GitHub.com<span class="reference-accessdate">. Retrieved <span class="nowrap">10 February</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://github.com/Xor-el/HashLib4Pascal">GitHub - Xor-el/HashLib4Pascal: Hashing for Modern Object Pascal</a></span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/goncalossilva/kotlinx-murmurhash">"goncalossilva/kotlinx-murmurhash"</a>. GitHub.com. 10 December 2021<span class="reference-accessdate">. Retrieved <span class="nowrap">14 December</span> 2021</span>.</cite></span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><cite id="CITEREFraycmorgan_(owner)" class="citation web cs1">raycmorgan (owner). <a rel="nofollow" class="external text" href="https://gist.github.com/588423">"Javascript implementation by Ray Morgan"</a>. Gist.github.com<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><cite id="CITEREFINRIA" class="citation web cs1">INRIA. <a rel="nofollow" class="external text" href="https://github.com/ocaml/ocaml/blob/trunk/runtime/hash.c">"OCaml Source"</a>. GitHub.com.</cite></span>
</li>
<li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://nginx.org/en/CHANGES">"nginx"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/rubinius/rubinius/commit/1d69526c484cc9435a7198e41b8995db6c3acf1a">"Rubinius"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">29 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://libmemcached.org/libMemcached.html">"libMemcached"</a>. <i>libmemcached.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">21 October</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/npm/write-file-atomic/commit/22dd8759076fc8d0327d50693283060e479afafc">"switch from MD5 to murmur"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://code.google.com/p/maatkit/source/detail?r=3273">"maatkit"</a>. 24 March 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://fallabs.com/kyotocabinet/spex.html">"Kyoto Cabinet specification"</a>. Fallabs.com. 4 March 2011<span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://wiki.apache.org/cassandra/Partitioners">"Partitioners"</a>. apache.org. 15 November 2013<span class="reference-accessdate">. Retrieved <span class="nowrap">19 December</span> 2013</span>.</cite></span>
</li>
<li id="cite_note-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-45">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=d7o6a75sfY0">"Introduction to Apache Cassandra™ + What's New in 4.0 by Patrick McFadin. DataStax Presents"</a>. <i>YouTube</i>. 10 April 2019.</cite></span>
</li>
<li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><cite class="citation web cs1 cs1-prop-unfit"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150402190133/http://www.solr-start.com/javadoc/solr-lucene/org/apache/lucene/codecs/bloom/MurmurHash2.html">"Solr MurmurHash2 Javadoc"</a>. 31 August 2022. Archived from the original on 2 April 2015.</cite></span>
</li>
<li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/VowpalWabbit/vowpal_wabbit/blob/master/explore/hash.h">"hash.cc in vowpalwabbit source code"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-48">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.elastic.co/guide/en/elasticsearch/reference/2.0/breaking_20_crud_and_routing_changes.html#_routing_hash_function">"Elasticsearch 2.0 - CRUD and routing changes"</a>.</cite></span>
</li>
<li id="cite_note-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-49">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/google/guava/blob/master/guava/src/com/google/common/hash/Hashing.java">"Guava Hashing.java"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/internals/BuiltInPartitioner.java">"Kafka BuiltInPartitioner.java"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-51">^</a></b></span> <span class="reference-text">Virtual Data Optimizer <a rel="nofollow" class="external text" href="https://github.com/dm-vdo/kvdo">source code</a></span>
</li>
<li id="cite_note-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-52">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://emboss.github.io/blog/2012/12/14/breaking-murmur-hash-flooding-dos-reloaded/">"Breaking Murmur: Hash-flooding DoS Reloaded"</a>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://github.com/aappleby/smhasher">Official SMHasher site</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-06-13" href="https://en.wikipedia.org/wiki/?title=MurmurHash&amp;oldid=1295314879">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>